using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace AppManagement.MainManagers
{
	#region using
	using DevComponents.DotNetBar;
	using AppManagement.Models;
	using AppManagement.Repositories;
	using AppManagement.Helpers;
	using System.Data;
	using System.Drawing;
	using System.IO;
	#endregion

	public partial class FrmCapNhatChuyenXe : Office2007Form
	{
		public EventHandler Handler { get; set; }
        private int MaChuyenXe = -1;

		public FrmCapNhatChuyenXe(int machuyenxe = -1)
		{
			InitializeComponent();
            LoadTaiXe();
            LoadXes();
            LoadGioKhoiHanh();
            this.MaChuyenXe = machuyenxe;

            if (this.MaChuyenXe != -1)
                LoadThongTinChuyenXe();
		}

        /// <summary>
        /// Load thong tin chuyen xe
        /// </summary>
        private void LoadThongTinChuyenXe()
        {
            var chuyenxe = ChuyenXeRepository.SelectByID(this.MaChuyenXe);

            cbxTaiXe.SelectedItem = chuyenxe.NhanVien;
            cbxXe.SelectedItem = chuyenxe.Xe;
            txtDonGia.Text = String.Format("{0:#,##0;Nothing}", chuyenxe.DonGia.Value);

            var gioKhoiHanh = chuyenxe.GioKhoiHanh;
            var gio = gioKhoiHanh.Split(new char[] { ':' })[0];
            var phut = gioKhoiHanh.Split(new char[] { ':' })[1];

            cbxGio.SelectedItem = gio;
            cbxPhut.SelectedItem = phut;
        }

        /// <summary>
        /// Load danh sach nhan vien voi vai tro la tai xe
        /// </summary>
        private void LoadTaiXe()
        {
            var taiXes = NhanVienRepository.SelectTaiXes();
            if (taiXes.Count > 0)
            {
                cbxTaiXe.Items.Clear();
                foreach (NhanVien taixe in taiXes)
                {
                    cbxTaiXe.Items.Add(taixe);
                }
            }
        }

        /// <summary>
        /// Load danh sach xe
        /// </summary>
        private void LoadXes()
        {
            var xes = XeRepository.SelectAll();
            if (xes.Count > 0)
            {
                cbxXe.Items.Clear();
                foreach (Xe xe in xes)
                {
                    cbxXe.Items.Add(xe);
                }
            }
        }

        /// <summary>
        /// Load gio, phut khoi hanh
        /// </summary>
        private void LoadGioKhoiHanh()
        {
            // Load gio
            cbxGio.Items.Clear();
            for (int i = 0; i < 24; i++)
                cbxGio.Items.Add(i.ToString());

            // Load phut
            cbxPhut.Items.Clear();
            for (int i = 0; i < 60; i++)
            {
                if (i == 0)
                    cbxPhut.Items.Add("00");
                else if (i % 5 == 0)
                {
                    if (i < 10)
                        cbxPhut.Items.Add("0" + i.ToString());
                    else
                        cbxPhut.Items.Add(i.ToString());
                }
            }
        }

		private void btnChonNhanVien_Click(object sender, EventArgs e)
		{
			FrmQuanLyNhanVien frm = new FrmQuanLyNhanVien();
			frm.ShowDialog();
            LoadTaiXe();
		}

		private void btnChonXe_Click(object sender, EventArgs e)
		{
			FrmQuanLyXe frm = new FrmQuanLyXe();
			frm.ShowDialog();
            LoadXes();
		}

		private bool ValidateInput(ref string errorText)
		{
			if (cbxTaiXe.SelectedIndex == -1)
			{
                errorText = "Vui lòng chọn tài xế";
				return false;
			}
			if (cbxXe.SelectedIndex == -1)
			{
                errorText = "Vui lòng chọn xe";
				return false;
			}
            if (cbxGio.SelectedIndex == -1)
            {
                errorText = "Vui lòng chọn giờ khởi hành";
                return false;
            }
            if (cbxPhut.SelectedIndex == -1)
            {
                errorText = "Vui lòng chọn phút khởi hành";
                return false;
            }
            if (string.Empty.Equals(txtDonGia.Text))
            {
                errorText = "Vui lòng nhập đơn giá";
                return false;
            }
            if (int.Parse(txtDonGia.Text.Replace(",", string.Empty).Replace(".", string.Empty)) <= 0)
            {
                errorText = "Đơn giá không hợp lệ";
                return false;
            }
			return true;
		}

		private void btnCapNhat_Click(object sender, EventArgs e)
		{
			var errorText = string.Empty;
			if (!ValidateInput(ref errorText))
			{
				MessageBox.Show(errorText, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
				return;
			}
            // Format: MaTaiXe#TenTaiXe#MaBSXe#GioKhoiHanh#DonGia
			TransferDataInfo(this, new TransferSimpleDataEvent(string.Format("{0}#{1}#{2}#{3}#{4}", 
                ((NhanVien)cbxTaiXe.SelectedItem).MaNhanVien,
                ((NhanVien)cbxTaiXe.SelectedItem).HoTen,
                ((Xe)cbxXe.SelectedItem).MaBSXe,
                cbxGio.SelectedItem.ToString() + ":" + cbxPhut.SelectedItem.ToString(),
                txtDonGia.Text)));
		}

		public void TransferDataInfo(object sender, TransferSimpleDataEvent e)
		{
            this.Handler(this, e);
			this.Close();
		}

		private void btnThoat_Click(object sender, EventArgs e)
		{
			this.Close();
		}

		private void txtDonGia_KeyPress(object sender, KeyPressEventArgs e)
		{
			if (!char.IsNumber(e.KeyChar) && (Keys)e.KeyChar != Keys.Back && e.KeyChar != '.')
			{
				e.Handled = true;
			}
		}

        private bool endChange = false;

        private void txtDonGia_TextChanged(object sender, EventArgs e)
        {
            if (endChange)
            {
                endChange = false;
                this.txtDonGia.SelectionStart = this.txtDonGia.Text.Length;
                return;
            }
            if (txtDonGia.Text.Length > 0)
            {
                var strOrigin = txtDonGia.Text.Replace(",", string.Empty);
                var strFormated = String.Format("{0:#,##0;Nothing}", long.Parse(strOrigin));
                if (strOrigin != strFormated)
                {
                    endChange = true;
                    this.txtDonGia.Text = strFormated;
                }
            }
        }

	}

}
